This invention relates to the field of computer systems. More particularly, sparse multi-component files and methods for using such files are provided.
In some computer systems and/or networks, information may be striped across multiple devices to improve performance. Striping, as implemented in the RAID-0 storage scheme, involves storing “stripes” of information across multiple devices, rather than writing all the information to one device. Each stripe comprises a separate “chunk” of data written to each device in the stripe set (the set of devices participating in the striping scheme). Because the task of writing or reading the information is distributed among the multiple devices in parallel, the input/output throughput of the system can be improved.
Traditionally, striped information is processed at the storage block level. In particular, the information to be striped has no logical structure or meaning—it may comprise various unrelated parts of different files, volumes or other logical information constructs. Instead, the information is simply treated as a set of storage blocks to be distributed among the devices, and an algorithm is applied to determine how many blocks to include in each stripe, and which device each chunk of the stripe is to be stored on.
Whenever information needs to be retrieved from a striped storage system, all the devices must generally be accessed. Because the chunks written to one device have no meaning without the other chunks, typically one device cannot, by itself, satisfy a retrieval request (e.g., for a particular file); the chunks striped to a particular device are generally not identifiable or accessible directly through the device.
Also, in a striped storage system, the chunks written to a particular device are packed. That is, each chunk written to a particular device is stored contiguously to the chunks before and after it. This is done to conserve storage space on the device.
Further, in storage systems that employ block-level striping, a device that is a member of a striped configuration cannot easily be converted into a mirror, and vice versa. In a mirroring scheme (e.g., as implemented for RAID-1), all blocks written to a specified device are also written to another device, to provide redundancy. One is thus a “mirror” of the other.
To convert between block-level striping and mirroring, the entire original device or set of information must be re-read and either striped or mirrored, depending on the form of storage that is desired. The structure of the stripe set (or a mirror) must be completely reconfigured to change it to a mirror (or stripe set).
Thus, there is a need for a system and method for striping data across multiple devices in which logical sets of information (e.g., files) are readily identifiable or recognizable, and in which a stripe set can be readily converted to or from another form (e.g., a mirror).